//============================================================================================
/**
 * @file	scr_wazaoshie.c
 * @brief	スクリプトコマンド：技教え関連(非常駐フィールド)
 * @author	Satoshi Nohara. Miyuki Iwasawa
 * @date	07.12.17
 *
 * リスト処理の似たものがscr_field.cにも存在している
 */
//============================================================================================
#include "common.h"
#include "system/lib_pack.h"
#include "fieldsys.h"

#include "script.h"
#include "scrcmd_def.h"
#include "field/eventflag.h"
#include "field/evwkdef.h"
#include "sysflag.h"
#include "syswork.h"
#include "scrcmd.h"
#include "ev_pokemon.h"
#include "itemtool/myitem.h"
#include "itemtool/itemsym.h"

#include "battle/wazano_def.h"
#include "battle/battle_server.h"		//フォルム定義

#include "system/wipe.h"
#include "system/fontproc.h"
#include "system/window.h"
#include "system/snd_tool.h"
#include "system/bmp_list.h"
#include "scr_wazaoshie.h"
#include "msgdata\msg.naix"
#include "msgdata\msg_ev_win.h"
#include "ev_win.h"
#include "fieldmap.h"
#include "fld_bmp.h"
#include "field_poketch.h"
#include "field_poketch.h"

#include "msgdata/msg_waza_oshie.h"

//==============================================================================================
//
//	技教え構造体
//
//==============================================================================================
#define WAZA_OSHIE_LIST_MAX		(6)
#define WAZA_OSHIE_LIST_1ST_MAX	(7)

#define WAZA_FLAG_BUFLEN	(8)	//64個までは対応
typedef struct{
	u8 flag[WAZA_FLAG_BUFLEN];	//ビット単位で技教えられるかを持っている
}WAZA_OSHIE_DATA;

#define WAZA_OSHIE_DATA_FILE	("fielddata/wazaoshie/waza_oshie.bin")

#if 0
	フォルム違い一覧(07.12.17 西野さんより)

	ポケモン名	パターン	パーソナル
	アンノーン	２８種		×
	デオキシス	４種		○
	エウリス	２種		○
	プラズマ	６種		○
	キマイラン	２種		○
	ミノメス	３種		○
	ミノムッチ	３種		×
	シーウシ	２種		×
	シードルゴ	２種		×
	ポワルン	４種		×
	チェリシュ	２種		×
	アウス		１７種		×

	パーソナルが複数あるもののみ、技覚えの対応も複数ある

	データリストの一番下に、別フォルム(といっていいのか微妙だが)はまとまっている
#endif

//★エクセルデータの並びがずれたら対応しないとダメ！(参照する時に-1している)
enum{
	WAZAOSHIE_DEO_A		= 494,
	WAZAOSHIE_DEO_D		= 495,
	WAZAOSHIE_DEO_S		= 496,

	WAZAOSHIE_MINO_G	= 497,
	WAZAOSHIE_MINO_M	= 498,

	WAZAOSHIE_KIMA		= 499,

	WAZAOSHIE_EU		= 500,

	WAZAOSHIE_PURA_1	= 501,
	WAZAOSHIE_PURA_2	= 502,
	WAZAOSHIE_PURA_3	= 503,
	WAZAOSHIE_PURA_4	= 504,
	WAZAOSHIE_PURA_5	= 505,

	WAZAOSHIE_DATA_MAX	= WAZAOSHIE_PURA_5,
};


typedef struct{
	u16 waza;
	u8 bp;
	u8 color;				//青＝技、赤＝力、黄＝心
}WAZA_OSHIE_LIST;

//教えてくれる技のリスト(★ポケモン別技習得リストにあわせる)
static const WAZA_OSHIE_LIST waza_oshie_tbl[] = {
	//0-00
	{ WAZANO_DAIBINGU,		40, WAZA_OSHIE_COL_BLUE },
	{ WAZANO_DOROKAKE,		32, WAZA_OSHIE_COL_RED },
	{ WAZANO_RENZOKUGIRI,	32, WAZA_OSHIE_COL_BLUE },
	{ WAZANO_KOGOERUKAZE,	48, WAZA_OSHIE_COL_BLUE },
	{ WAZANO_KOROGARU,		32, WAZA_OSHIE_COL_RED },
	{ WAZANO_KAMINARIPANTI,	64, WAZA_OSHIE_COL_BLUE },
	{ WAZANO_HONOONOPANTI,	64, WAZA_OSHIE_COL_BLUE },
	{ WAZANO_BAKADIKARA,	48, WAZA_OSHIE_COL_RED },
	//1-08
	{ WAZANO_REITOUPANTI,	64, WAZA_OSHIE_COL_BLUE },
	{ WAZANO_AIANHEDDO,		40, WAZA_OSHIE_COL_RED },
	{ WAZANO_AKUATEERU,		40, WAZA_OSHIE_COL_RED },
	{ WAZANO_AYASIIKAZE,	48, WAZA_OSHIE_COL_BLUE },
	{ WAZANO_IEKI,			32, WAZA_OSHIE_COL_RED },
	{ WAZANO_IBIKI,			32, WAZA_OSHIE_COL_YELLOW },
	{ WAZANO_URAMI,			40, WAZA_OSHIE_COL_YELLOW },
	{ WAZANO_EAKATTAA,		48, WAZA_OSHIE_COL_BLUE },
	//2-16
	{ WAZANO_TEDASUKE,		40, WAZA_OSHIE_COL_YELLOW },
	{ WAZANO_GAMUSYARA,		64, WAZA_OSHIE_COL_RED },
	{ WAZANO_GEKIRIN,		48, WAZA_OSHIE_COL_RED },
	{ WAZANO_GENSINOTIKARA,	40, WAZA_OSHIE_COL_RED },
	{ WAZANO_KOUGOUSEI,		40, WAZA_OSHIE_COL_YELLOW },
	{ WAZANO_SIGUNARUBIIMU,	40, WAZA_OSHIE_COL_RED },
	{ WAZANO_SINENNOZUTUKI,	64, WAZA_OSHIE_COL_BLUE },
	{ WAZANO_SINKUUHA,		48, WAZA_OSHIE_COL_BLUE },
	//3-24
	{ WAZANO_DAITINOTIKARA,	40, WAZA_OSHIE_COL_RED },
	{ WAZANO_DASUTOSYUUTO,	32, WAZA_OSHIE_COL_RED },
	{ WAZANO_TATUMAKI,		40, WAZA_OSHIE_COL_RED },
	{ WAZANO_TANEBAKUDAN,	40, WAZA_OSHIE_COL_RED },
	{ WAZANO_TEPPEKI,		40, WAZA_OSHIE_COL_RED },
	{ WAZANO_DENZIHUYUU,	40, WAZA_OSHIE_COL_YELLOW },
	{ WAZANO_TOTTEOKI,		48, WAZA_OSHIE_COL_YELLOW },
	{ WAZANO_TOBIHANERU,	32, WAZA_OSHIE_COL_RED },
	//4-32
	{ WAZANO_TORIKKU,		48, WAZA_OSHIE_COL_BLUE },
	{ WAZANO_NEPPUU,		48, WAZA_OSHIE_COL_RED },
	{ WAZANO_HATAKIOTOSU,	40, WAZA_OSHIE_COL_BLUE },
	{ WAZANO_HUIUTI,		40, WAZA_OSHIE_COL_BLUE },
	{ WAZANO_SUPIIDOSUTAA,	40, WAZA_OSHIE_COL_YELLOW },
	{ WAZANO_SAWAGU,		48, WAZA_OSHIE_COL_YELLOW },
	{ WAZANO_IKARINOMAEBA,	40, WAZA_OSHIE_COL_RED },
	{ WAZANO_ITAMIWAKE,		64, WAZA_OSHIE_COL_RED },
	//5-40
	{ WAZANO_ITOWOHAKU,		32, WAZA_OSHIE_COL_YELLOW },
	{ WAZANO_OIKAZE,		48, WAZA_OSHIE_COL_YELLOW },
	{ WAZANO_ZYUURYOKU,		32, WAZA_OSHIE_COL_YELLOW },
	{ WAZANO_NAYAMINOTANE,	32, WAZA_OSHIE_COL_YELLOW },
	{ WAZANO_MAZIKKUKOOTO,	32, WAZA_OSHIE_COL_YELLOW },
	{ WAZANO_NARIKIRI,		48, WAZA_OSHIE_COL_YELLOW },
	{ WAZANO_IYASINOSUZU,	48, WAZA_OSHIE_COL_YELLOW },
	{ WAZANO_KETAGURI,		32, WAZA_OSHIE_COL_RED },
	//6-48
	{ WAZANO_GODDOBAADO,	64, WAZA_OSHIE_COL_RED },
	{ WAZANO_TOOSENBOU,		32, WAZA_OSHIE_COL_YELLOW },
	{ WAZANO_MUSIKUI,		32, WAZA_OSHIE_COL_BLUE },
	//ずつき
	{ WAZANO_ZUTUKI,		0,	WAZA_OSHIE_COL_ZUTUKI },
};

#define WAZA_OSHIE_TBL_MAX		( NELEMS(waza_oshie_tbl) )


//============================================================================================
//
//	プロロトタイプ宣言
//
//============================================================================================
BOOL EvCmdWazaOshieDataCount(VM_MACHINE * core );
BOOL EvCmdWazaOshieChgPokeWaza( VM_MACHINE * core );
BOOL EvCmdWazaOshieItemCheck( VM_MACHINE * core );
BOOL EvCmdWazaOshieItemSub( VM_MACHINE * core );
BOOL EvCmdWazaOshieBmpListStart( VM_MACHINE * core );
static BOOL EvWazaOshieSelWinWait(VM_MACHINE * core);

static u16 GetWazaOshieWazaNo( u16 index );
static u16 GetWazaOshieWazaNoByWazaNo( u16 waza );
static u16 GetWazaOshieDataIndex( u16 monsno,u8 form );
static u16 GetOshieWazaList( POKEMON_PARAM* pp, u16 color, u8* pw);
static WAZA_OSHIE_DATA* AllocWazaOshieData( int heapID ,u16 index);

//============================================================================================
//
//	コマンド
//
//============================================================================================

//--------------------------------------------------------------------------------------------
/**
 * 覚えられる技があるか(ページ数を返す)
 *
 * @param	core		仮想マシン制御構造体へのポインタ
 *
 * @return	"0"
 */
//--------------------------------------------------------------------------------------------
BOOL EvCmdWazaOshieDataPageCount( VM_MACHINE * core )
{
	u16 pos		= VMGetWorkValue(core);
	u16 color	= VMGetWorkValue(core);
	u16* ret_wk	= VMGetWork( core );
	u16 num;
	num = GetOshieWazaList(
				PokeParty_GetMemberPointer( SaveData_GetTemotiPokemon(core->fsys->savedata), pos ),
				color,NULL);
	if(num == 0){
		*ret_wk = 0;
	}else if(num <= WAZA_OSHIE_LIST_1ST_MAX){
		*ret_wk = 1;
	}else{
		*ret_wk = (num/WAZA_OSHIE_LIST_MAX)+1;
	}
	return 0;
}

//--------------------------------------------------------------------------------------------
/**
 * 手持ちポケモンの技を置き換える(ロトムでも使用)
 *
 * @param	core		仮想マシン制御構造体へのポインタ
 *
 * @return	"0"
 */
//--------------------------------------------------------------------------------------------
BOOL EvCmdWazaOshieChgPokeWaza( VM_MACHINE * core )
{
	u16 poke_pos= VMGetWorkValue(core);
	u16 waza_pos= VMGetWorkValue(core);
	u16 waza_no	= VMGetWorkValue(core);

	EvPoke_ChangeWaza(	SaveData_GetTemotiPokemon(core->fsys->savedata),
						poke_pos, waza_pos, waza_no );
	return 0;
}

//--------------------------------------------------------------------------------------------
/**
 * 指定した技を覚えるために必要なBPを返す
 *
 * @param	core		仮想マシン制御構造体へのポインタ
 *
 * @return	"0"
 */
//--------------------------------------------------------------------------------------------
BOOL EvCmdWazaOshieGetBP( VM_MACHINE * core )
{
	int i;
	u8 bp;
	u16 waza	= VMGetWorkValue(core);
	u16* ret_wk	= VMGetWork( core );

	OS_Printf( "waza = %d\n", waza );

	for( i=0; i < WAZA_OSHIE_TBL_MAX ;i++ ){
		if( waza != waza_oshie_tbl[i].waza ){
			continue;
		}
		*ret_wk	= waza_oshie_tbl[i].bp;
		return 0;
	}
	GF_ASSERT_MSG(0, "技ナンバー%d が不正です！\n",waza );
	*ret_wk = 0;
	return 0;
}

//--------------------------------------------------------------------------------------------
/**
 * 指定した手持ちのポケモンがずつきを覚えるかどうかを返す
 *
 * @param	core		仮想マシン制御構造体へのポインタ
 *
 * @return	"0"
 */
//--------------------------------------------------------------------------------------------
BOOL EvCmdWazaOshieZutukiCheck( VM_MACHINE * core )
{
	int i;
	u16 pos	= VMGetWorkValue(core);
	u16* ret_wk	= VMGetWork( core );
	u16	num;

	num = GetOshieWazaList(
			PokeParty_GetMemberPointer(SaveData_GetTemotiPokemon(core->fsys->savedata),pos),
			WAZA_OSHIE_COL_ZUTUKI ,NULL);

	if(num){
		*ret_wk = TRUE;
	}else{
		*ret_wk = FALSE;
	}
	return 0;
}

//==============================================================================================
//
//	static
//
//==============================================================================================

//--------------------------------------------------------------
/**
 * 渡されたインデックスから技教えの技ナンバーを取得
 *
 * @param   index	リストの何番目か
 *
 * @retval  "技ナンバー"
 */
//--------------------------------------------------------------
static u16 GetWazaOshieWazaNo( u16 index )
{
	return waza_oshie_tbl[index].waza;
}

//--------------------------------------------------------------
/**
 * 渡された技ナンバーから技教えの技ナンバーを取得
 *
 * @param   waza	技ナンバー
 *
 * @retval  "技ナンバー"
 */
//--------------------------------------------------------------
static u16 GetWazaOshieWazaNoByWazaNo( u16 waza )
{
	int i;

	for( i=0; i < WAZA_OSHIE_TBL_MAX ;i++ ){
		if( waza_oshie_tbl[i].waza == waza ){
			return i;
		}
	}

	GF_ASSERT( (0) && "技ナンバーが不正です！" );
	return 0;
}

//--------------------------------------------------------------
/**
 * モンスターナンバーとフォルムからデータのindexを取得
 *
 * @param   monsno	取得したいモンスターナンバー
 *
 * @retval  "データ"
 */
//--------------------------------------------------------------
static u16 GetWazaOshieDataIndex( u16 monsno,u8 form )
{
	u16 index = monsno;

	//フォルムチェックして必要なインデックスを取得

	switch( monsno ){

	//デオキシス
	case MONSNO_DEOKISISU:
		if( form == FORMNO_DEOKISISU_ATTACK ){
			index = WAZAOSHIE_DEO_A;
		}else if( form == FORMNO_DEOKISISU_DEFENCE ){
			index = WAZAOSHIE_DEO_D;
		}else if( form == FORMNO_DEOKISISU_SPEED ){
			index = WAZAOSHIE_DEO_S;
		}
		break;

	//ミノメス
	case MONSNO_MINOMESU:
		if( form == FORMNO_MINOMUTTI_SUNA ){
			index = WAZAOSHIE_MINO_G;
		}else if( form == FORMNO_MINOMUTTI_TETSU ){
			index = WAZAOSHIE_MINO_M;
		}
		break;

	//キマイラン
	case MONSNO_KIMAIRAN:
		if( form == FORMNO_GIRATINA_ORIGIN ){
			index = WAZAOSHIE_KIMA;
		}
		break;

	//エウリス
	case MONSNO_EURISU:
		if( form == FORMNO_SHEIMI_FLOWER ){
			index = WAZAOSHIE_EU;
		}
		break;

	//プラズマ
	case MONSNO_PURAZUMA:
		if( form == FORMNO_ROTOMU_HOT ){
			index = WAZAOSHIE_PURA_1;
		}else if( form == FORMNO_ROTOMU_WASH ){
			index = WAZAOSHIE_PURA_2;
		}else if( form == FORMNO_ROTOMU_COLD ){
			index = WAZAOSHIE_PURA_3;
		}else if( form == FORMNO_ROTOMU_FAN ){
			index = WAZAOSHIE_PURA_4;
		}else if( form == FORMNO_ROTOMU_CUT ){
			index = WAZAOSHIE_PURA_5;
		}
		break;
	};

	return index-1;
}

//--------------------------------------------------------------
/**
 * 技教えで覚えられる技NoリストをAllocしたメモリに取得
 *
 * @param	pp		ポケモンチェックをしない場合はNULLを渡す
 * @param	color	教えパターン(心技体)
 * @param	pw		技Noを格納するバッファ(2*WAZA_OSHIE_TBL_MAXのサイズが必要)
 *
 * @retval	num		u16 覚えられる技の数を返す
 */
//--------------------------------------------------------------
static u16	GetOshieWazaList( POKEMON_PARAM* pp, u16 color ,u8* pw)
{
	int i,waza_i;
	u16 num,poke_waza[4];
	WAZA_OSHIE_DATA* pd;

	//ポケモンが覚えてる技を取得
	for( waza_i=0; waza_i < 4 ;waza_i++ ){
		poke_waza[waza_i] = PokeParaGet( pp, (ID_PARA_waza1 + waza_i), NULL );
	}

	//データテーブルindex取得
	{
		u16 data_idx = GetWazaOshieDataIndex(
					PokeParaGet(pp,ID_PARA_monsno,NULL), PokeParaGet(pp,ID_PARA_form_no,NULL));
		pd = AllocWazaOshieData( HEAPID_WORLD, data_idx );
	}

	num = 0;

	//フラグ取得
	for( i=0; i < WAZA_OSHIE_TBL_MAX ;i++ ){
		BOOL bit;
		bit = (pd->flag[i/8] >> (i%8)) & 0x01;

		//覚えられるビットが立っていて、渡されたカラーと同じかチェック
		if( (!bit) || (color != waza_oshie_tbl[i].color) ){
			continue;
		}

		//すでにポケモンが覚えてる技は除外
		for( waza_i=0; waza_i < 4 ;waza_i++ ){
			if( poke_waza[waza_i] == waza_oshie_tbl[i].waza ){
				break;
			}
		}
		if( waza_i < 4 ){
			continue;
		}
		if(pw != NULL){
			pw[num] = i;	//waza_oshie_tbl[i].waza;
		}
		num++;
	}
	sys_FreeMemoryEz(pd);

	return num;
}

//--------------------------------------------------------------
/**
 *	@brief	技教えデータテーブルを取得
 *
 * @param   monsno	モンスターナンバー
 *
 * @retval
 *
 * Allocした領域にデータを取得するので、不要になったら呼び出し側が解放すること
 */
//--------------------------------------------------------------
static WAZA_OSHIE_DATA* AllocWazaOshieData( int heapID, u16 index )
{
	int i,j,size,num;
	FSFile	fp;
	WAZA_OSHIE_DATA* pd;

	FS_InitFile(&fp);

	if(!FS_OpenFile(&fp,WAZA_OSHIE_DATA_FILE)){
		GF_ASSERT_MSG(0,"FS_OpenFile(\"%s\")...Failed\n",WAZA_OSHIE_DATA_FILE);
		return NULL;
	}
	//ファイル長取得
	size = FS_GetLength(&fp);

	GF_ASSERT_MSG((size == sizeof(WAZA_OSHIE_DATA)*WAZAOSHIE_DATA_MAX),"ファイル長不正。要コンバートデータ確認\n");

	pd = sys_AllocMemoryLo(heapID,sizeof(WAZA_OSHIE_DATA));

	//データ取得
	FS_SeekFile(&fp,sizeof(WAZA_OSHIE_DATA)*index,FS_SEEK_SET);
	FS_ReadFile(&fp,pd,sizeof(WAZA_OSHIE_DATA));

	(void)FS_CloseFile(&fp);

	return pd;
}

//--------------------------------------------------------------
/**
 * @brief	BMPリスト	初期化、リスト作成、開始
 *
 * @param	none
 *
 * @retval	1
 */
//--------------------------------------------------------------
BOOL EvCmdWazaOshieBmpListStart( VM_MACHINE * core )
{
	int i,num,list_num,idx,next_f;
	u8 waza[WAZA_OSHIE_TBL_MAX];

	FIELDSYS_WORK* fsys	 = core->fsys;
	EV_WIN_WORK **ev_win = FieldSubLcdControler_GetEvWin( fsys );
    WORDSET** wordset	 = GetEvScriptWorkMemberAdrs( fsys, ID_EVSCR_WORDSET );

	u16 pos						= VMGetWorkValue( core );
	u16 color					= VMGetWorkValue( core );
	u16	page					= VMGetWorkValue( core );
	u16 wk_id					= VMGetU16( core );

	//仮想マシンの汎用レジスタにワークのIDを格納
	core->reg[0] = wk_id;

	//教えられる技リスト取得
	num = GetOshieWazaList(
			PokeParty_GetMemberPointer( SaveData_GetTemotiPokemon(core->fsys->savedata), pos ),
			color, waza);

	//描画リスト数
	if(num <= WAZA_OSHIE_LIST_1ST_MAX){	//1ページで収まる
		list_num = num;
		idx = 0;
		next_f = FALSE;
	}else if(num > (page*WAZA_OSHIE_LIST_MAX)){
		idx = page*WAZA_OSHIE_LIST_MAX;
		list_num = num-idx;
		if( list_num > WAZA_OSHIE_LIST_MAX){
			list_num = WAZA_OSHIE_LIST_MAX;
		}
		next_f = TRUE;
	}else{	//エラー
		OS_Printf("WazaOshiePageError %d\n",page);
		list_num = WAZA_OSHIE_LIST_MAX;
		idx = 0;
	}
	//evwin初期化
    *ev_win	= CmdEvBmpList_Init( fsys, 1, 1, 0, 1,
					             GetEventWorkAdrs(fsys,wk_id), *wordset,
                                 GetEvScriptWorkMemberAdrs(core->fsys,ID_EVSCR_MSGWINDAT),
                                 core->msgman );

	//リスト作成
	{
		MSGDATA_MANAGER* man;
		STRBUF* str_waza;
		u16 msg;

		//技名
		man = MSGMAN_Create( MSGMAN_TYPE_NORMAL, ARC_MSG, NARC_msg_wazaname_dat, HEAPID_EVENT );
		str_waza = STRBUF_Create(BUFLEN_WAZA_NAME,HEAPID_EVENT);

		if((list_num+next_f) < 4){
			msg = msg_waza_oshie_win01_00;
		}else{
			msg = msg_waza_oshie_win01_01;
		}
		for( i=0; i < list_num ;i++ ){
			MSGMAN_GetString(man, waza_oshie_tbl[waza[idx+i]].waza, str_waza );
			WORDSET_RegisterWord( *wordset, 0, str_waza, PM_NEUTRAL, TRUE, PM_LANG);
			WORDSET_RegisterNumber( *wordset, 1, waza_oshie_tbl[waza[idx+i]].bp, 2, NUMBER_DISPTYPE_SPACE, NUMBER_CODETYPE_DEFAULT );
			CmdEvBmpList_MakeList( *ev_win, msg, EV_WIN_TALK_MSG_NONE, waza_oshie_tbl[waza[idx+i]].waza);
		}
		STRBUF_Delete(str_waza);
		MSGMAN_Delete( man );
	}

	//1Pで収まらない場合続きをセット
	if(next_f){
		CmdEvBmpList_MakeList( *ev_win, msg_waza_oshie_win02, EV_WIN_TALK_MSG_NONE, EV_WIN_NEXT );
	}
	//やめるをセット
	CmdEvBmpList_MakeList( *ev_win, msg_waza_oshie_win03, EV_WIN_TALK_MSG_NONE, EV_WIN_B_CANCEL );

	//リスト開始
	FieldSubLcdControler_ChangeSubSeq( fsys, SUBLCD_MODE_YESNO_MENU, 7, GetEventWorkAdrs(fsys,core->reg[0]) );

	VM_SetWait( core, EvWazaOshieSelWinWait );

	{
		u16* ret_wk = GetEventWorkAdrs(fsys,core->reg[0]);
		OS_Printf("CoreReg %d  = %d\n",core->reg[0],*ret_wk);
	}
	return 1;
}

//ウェイト関数
static BOOL EvWazaOshieSelWinWait(VM_MACHINE * core)
{
    FIELDSYS_WORK* fsys = core->fsys;
	EV_WIN_WORK **ev_win  = FieldSubLcdControler_GetEvWin( fsys );
    u16* ret_wk           = GetEventWorkAdrs( fsys, core->reg[0] );	//注意！

//	OS_Printf("CoreReg %d  = %d\n",core->reg[0],*ret_wk);
//	OS_Printf("GetSelWazaNo %d\n",*ret_wk);
    if( *ret_wk == EV_WIN_NOTHING ){
        return FALSE;	//継続
    }
	// EV_WIN解放
	EvWinWork_Release( *ev_win );

    return TRUE;		//終了
}

//--------------------------------------------------------------------------------------------
/**
 * 指定した技をレベルアップで覚えるかチェック
 *
 * @param	core		仮想マシン制御構造体へのポインタ
 *
 * @return	"0"
 */
//--------------------------------------------------------------------------------------------
BOOL EvCmdPokeLvUpWazaCheck( VM_MACHINE * core )
{
	FIELDSYS_WORK* fsys = core->fsys;
	u16 pos = VMGetWorkValue(core);
	u16 wazano = VMGetWorkValue(core);
	u16* ret_wk = VMGetWork(core);

	*ret_wk = FALSE;
	{
		POKEMON_PARAM* pp;
		int num,i;
		u16* waza;

		pp = PokeParty_GetMemberPointer( SaveData_GetTemotiPokemon(core->fsys->savedata), pos );
		waza = sys_AllocMemoryLo(HEAPID_WORLD,LEVELUPWAZA_OBOE_BUFLEN);

		num = PokeOboeruWazaAllGet(	PokeParaGet(pp,ID_PARA_monsno,NULL),
								PokeParaGet(pp,ID_PARA_form_no,NULL), waza);

		for(i = 0;i < num;i++){
			if(waza[i] == wazano){
				*ret_wk = TRUE;
				break;
			}
		}
		sys_FreeMemoryEz(waza);
	}
	return 0;
}
